package demo1;

public class UsePostorderAndInorderCreateTree {
    public int postIndex;
    public TreeNode buildTree(int[] inorder, int[] postorder) {
        postIndex=postorder.length-1;
        return buildTreeChild(postorder,inorder,0,inorder.length-1);
    }


    public TreeNode buildTreeChild(int[] postorder, int[] inorder,int inbegin,int inend) {
        //这种情况下 表明 当前root 没有子树了
        if(inbegin > inend) {
            return null;
        }
        TreeNode root = new TreeNode(postorder[postIndex]);
        int rootIndex = findVal(inorder,inbegin,inend,postorder[postIndex]);
        postIndex--;
        root.right = buildTreeChild(postorder,inorder,rootIndex+1,inend);
        root.left = buildTreeChild(postorder,inorder,inbegin,rootIndex-1);

        return root;
    }
    private int findVal(int[] inorder,int inbegin,int inend,int val) {
        for(int i = inbegin ;i <= inend;i++) {
            if(inorder[i] == val) {
                return i;
            }
        }
        return -1;
    }
}
